package com.example.utils.upload;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author gx
 * @date 2021/6/30 15:04
 */
public class UploadUtils {

    /**
     * 验证文件类型(检查文件类型调用此方法)
     *
     * @param files  文件路径或名称
     * @param uploadFolder  文件夹路径
     * @param fileTypeArray 要求得文件类型数组
     * @return 上传文件路径地址  以逗号分割 D:/upload/picture20210630162633_a.jpg,D:/upload/picture20210630162641_b.jpg
     */
    //文件上传
    public static String filesUpload(MultipartFile[] files, String uploadFolder, String[] fileTypeArray) {
        List<String> filePathList = new ArrayList<>();
        if (files != null && files.length > 0) {
            for (MultipartFile file : files) {
                //判断文件类型是否正确
                if (!UploadUtils.checkFileType(file.getOriginalFilename(), fileTypeArray)) {//不是要求得文件类型
                    return "文件类型错误";
                } else {//是要求得文件类型
                    // 保存文件
                    if (!file.isEmpty()) {
                        try {
                            String filePath = uploadFolder +"/" + (new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + file.getOriginalFilename());

                            filePathList.add(filePath);
                            File saveDir = new File(filePath);
                            if (!saveDir.getParentFile().exists()) {
                                saveDir.getParentFile().mkdirs();
                            }
                            // 转存文件
                            file.transferTo(saveDir);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        // 数组转String字符串
        return StringUtils.join(filePathList, ",");
    }

    /**
     * 验证文件类型(检查文件类型调用此方法)
     *
     * @param filePath  文件路径
     * @param fileTypeArray 要求得文件类型数组
     * @return ture:符合得文件类型  false:不符合得文件类型
     */
    public static boolean checkFileType(String filePath, String[] fileTypeArray) {
        if (filePath == null || !(fileTypeCompare(filePath, fileTypeArray))) {
            return false;
        }
        return true;
    }

    /**
     * 文件和已知得文件类型比较
     *
     * @param filePath  文件路径
     * @param fileTypeArray 要求得文件类型数组
     * @return ture:符合得文件类型  false:不符合得文件类型
     */
    public static boolean fileTypeCompare(String filePath, String[] fileTypeArray) {
        boolean isTure = false;//
        for (String fileType : fileTypeArray) {
            if (org.springframework.util.StringUtils.endsWithIgnoreCase(filePath, fileType)) {//判断文件路径结尾是否在给的文件类型得数组中找到
                isTure = true;
                return isTure;
            }
        }
        return isTure;
    }
}
